home *** CD-ROM | disk | FTP | other *** search
/ SPACE 1 / SPACE - Library 1 - Volume 1.iso / program / 168 / lorder.c < prev    next >
C/C++ Source or Header  |  1988-03-31  |  2KB  |  103 lines

  1. /* check the library ordering */
  2.  
  3. #include "stdio.h"
  4.  
  5. int    last_def;
  6. char    word[100];
  7.  
  8. main(argc, argv) char *argv[]; {
  9.     int i;
  10.     char *getword();
  11.     FILE *fp;
  12.     if ((fp = fopen(argv[1], "r")) == NULL) {
  13.         printf("can't open %s\n", argv[1]);
  14.         exit(0);
  15.     }
  16.     while (getword(fp, word)) {
  17.         if (strcmp(word, ":") == 0) {
  18.             define(getword(fp, word));
  19.         }
  20.         else if (strcmp(word, "jsr") == 0) {
  21.             use(getword(fp, word));
  22.         }
  23.         else if (word[0] == 'l' && word[1] == 'g') {
  24.             use(getword(fp, word));
  25.         }
  26.         else if (word[0] == 's' && word[1] == 'g') {
  27.             getword(fp, word);
  28.             use(getword(fp, word));
  29.         }
  30.     }
  31. }
  32.  
  33. char *
  34. getword(fp, s) FILE *fp; char *s; {
  35.     int c;
  36.     char *r = s;
  37.     c = getc(fp);
  38.     while (c != EOF && c <= ' ')
  39.         c = getc(fp);
  40.     if (c == EOF) return NULL;
  41.     while (c != EOF && c > ' ') {
  42.         *s++ = c;
  43.         c = getc(fp);
  44.     }
  45.     *s = 0;
  46.     return r;
  47. }
  48.  
  49. #define S_NIL    0
  50. #define MAXSYM    10000
  51. #define MAXSPC    20000        /* max symbol space            */
  52.  
  53. char     sym[MAXSPC];        /* space for symbols            */
  54. int      lsym = 0;            /* end of symbol space            */
  55. char     *symptr[MAXSYM];    /* pointer to the symbol string        */
  56. int     symtype[MAXSYM];    /* type of the symbol            */
  57. int    symval[MAXSYM];        /* value of a symbol            */
  58.  
  59. lookup(nm) char *nm; {
  60.     int i, start;
  61.     start = i = *nm;
  62.     while (symptr[i]) {
  63.         if (strcmp(nm, symptr[i]) == 0) return i;
  64.         i++;
  65.         if (i == MAXSYM) i = 0;
  66.         if (i == start) {
  67.             fprintf(stderr, "symbol table full");
  68.             return 0;
  69.         }
  70.     }
  71.     symptr[i] = &sym[lsym];
  72.     while (sym[lsym++] = *nm++)
  73.         ;
  74.     sym[lsym++] = 0;
  75.     symtype[i] = symval[i] = 0;
  76.     if (lsym >= MAXSPC) {
  77.         fprintf(stderr, "symbol space full");
  78.         return 0;
  79.     }
  80.     return i;
  81. }
  82.  
  83. define(s) char *s; {
  84.     int id;
  85.     if (s != NULL) {
  86.         /* printf("define %s\n", s); */
  87.         last_def = id = lookup(s);
  88.         symval[id] = 1;
  89.     }
  90. }
  91.  
  92. use(s) char *s; {
  93.     int id;
  94.     if (s != NULL) {
  95.         /* printf("    using %s in %s\n", s, symptr[last_def]); */
  96.         id = lookup(s);
  97.         if (symval[id])
  98.             printf("%s should come after %s\n", 
  99.                 s, symptr[last_def]);
  100.     }
  101. }
  102.  
  103.